<?php
/*
 +----------------------------------------------------------------------
 + Title        : ExtendFile 控制器
 + Author       : Randy_chen
 + Version      : V1.0.0.1
 + Initial-Time : 2020/9/27 15:59
 + Last-time    : 2020/9/27 15:59+ 86187
 + Desc         : ExtendFile
 +----------------------------------------------------------------------
*/


namespace randy\tools\units;


class ExtendFile
{
    /**
     * 创建目录
     *
     * @param string $dir
     */
    static public function createDir($dir)
    {
        if (!is_dir($dir)) {
            mkdir($dir, 0777);
        }
    }

    /**
     * 创建文件（默认为空）
     *
     * @param  $filename
     */
    static public function createFile($filename)
    {
        if (!is_file($filename)) {
            touch($filename);
        }
    }


    /**
     * 删除文件
     *
     * @param string $filename
     */
    static public function delFile($filename)
    {
        if (file_exists($filename)) {
            unlink($filename);
        }
    }

    /**
     * 删除目录
     *
     * @param string $path
     */
    static public function delDir($path)
    {
        if (is_dir($path)) {
            rmdir($path);
        }
    }

    /**
     * 删除目录及地下的全部文件
     *
     * @param string $dir
     *
     * @return bool
     */
    static public function delDirOfAll($dir) : bool
    {
        //先删除目录下的文件：
        if (is_dir($dir)) {
            $dh = opendir($dir);
            while (!!$file = readdir($dh)) {
                if ($file != "." && $file != "..") {
                    $fullpath = $dir . "/" . $file;
                    if (!is_dir($fullpath)) {
                        unlink($fullpath);
                    } else {
                        self::delDirOfAll($fullpath);
                    }
                }
            }
            closedir($dh);
            //删除当前文件夹：
            if (rmdir($dir)) {
                return true;
            } else {
                return false;
            }
        }
        return true;
    }


    /**
     * 下载文件
     *
     * @param string $file_path 绝对路径
     */
    static public function downFile($file_path)
    {
        //判断文件是否存在
        $file_path = iconv('utf-8', 'gb2312', $file_path); //对可能出现的中文名称进行转码
        if (!file_exists($file_path)) {
            exit('文件不存在！');
        }
        $file_name = basename($file_path); //获取文件名称
        $file_size = filesize($file_path); //获取文件大小
        $fp = fopen($file_path, 'r');      //以只读的方式打开文件
        header("Content-type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Accept-Length: {$file_size}");
        header("Content-Disposition: attachment;filename={$file_name}");
        $buffer = 1024;
        $file_count = 0;
        //判断文件是否结束
        while (!feof($fp) && ($file_size - $file_count > 0)) {
            $file_data = fread($fp, $buffer);
            $file_count += $buffer;
            echo $file_data;
        }
        fclose($fp); //关闭文件
    }

}